package com.ftg.learn;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.RandomAccess;

/**
 * 测试
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/5/18 下午2:42
 */
@RestController
@RefreshScope
public class A<T extends Number> implements Serializable {

    public static final long serialVersionUID = 1L;

    @Value("${user.name}")
    private transient String name;

    @GetMapping("/hello")
    public String hello() {
        return "hello:8085" + name;
    }

    //static 是在方法区加载类的时候加载的| 先加载的
    //实例变量 创建实例以后 --- 一定加载类以后
    public static void t1() {
    }

    public static <T> void test1(T t1) {

    }

    /**
     * javac java jvm启动一个进程 -- main(主线程) - 代码顺序流() - 用户线程
     * @param args
     */
    public static void main(String[] args) {
        //集合 ： 多态性
        // super声明人泛型   用 ? super T 要用T或者T的子类集来实例化
        List<? super C> abc = new ArrayList<>();

//        对类型进行了限制。有两种限定通配符，
//        一种是 <? extends T>  它通过确保类型必须是T的子类来设定类型的上界。
//        另一种是 <? super T> 它通过确保类型必须是T的父类来设定类型的下界。
//        泛型类型必须用限定内的类型来进行初始化，否则会导致编译错误。


        //记录一下
//        什么是限定通配符和非限定通配符 ?
//                答案：
//
//        1、限定通配符
//
//        对类型进行了限制。有两种限定通配符，一种是 <? extends T>  它通过确保类型必须是T的子类来设定类型的上界。另一种是 <? super T> 它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须用限定内的类型来进行初始化，否则会导致编译错误。
//
//        2、非限定通配符 ？
//
//        可以用任意类型来替代。如 List<?> 的意思是这个集合是一个可以持有任意类型的集合，它可以是 List<A> ，也可以是 List<B> ，或者 List<C> 等等

    }

}
